package rkdwogus7.basic;

public class J21_String {
	public static void main(String[] args) {
		// 문자열 클래스 다루기
		// 주민번호를 이용해서 성별 확인 프로그램
		// 9 : 남자, 8 : 여자
		String jumin = "123456-9876543";
		System.out.println("문자열 길이 : " + jumin.length());
		System.out.println("성별 문자 : " + jumin.charAt(8-1));
		// 자바에서는 특별한 경우를 제외하면 인덱스는 0부터 시작
		System.out.println("주민번호 식별 문자 : " + jumin.substring( 7 ));
		System.out.println("성별 문자 : " + jumin.substring( 7, 8 ) );
		// 시작위치는 그대로 지정, 끝 위치는 -1번째 까지
		
		String msg = "hello";
		
		if (msg == "hello") {
			System.out.println("일치함!");
		}
		else {
			System.out.println("일치 안함!");
		}
		
		String msg2 = "hello";
		
		if (msg == msg2) {
			System.out.println("일치함!");
		}
		else {
			System.out.println("일치 안함!");
		}
		
		String msg3 = new String("Java");
		String msg4 = new String("Java");
		
		if (msg3 == msg4) {
			System.out.println("일치함!");
		}
		else {
			System.out.println("일치 안함!");
		}
		// 실제 내부적으로는 heap에 있는 주소로 비교를 하기 때문에 다르지 않다고 나옴
		// msg4과 msg4가 메모리에 생성된 위치(주소) 가 다름
		// String 객체에서 == 연산자는 참조된 주소를 비교하는데 사용
		
		// equals method를 사용하면 값을 비교 할 수 있음
		if (msg3.equals(msg4)) {
			System.out.println("일치함!");
		}
		else {
			System.out.println("일치 안함!");
		}
		
		
		
		// msg(literal)와 msg5(new) 비교
		String msg5 = new String("hello");
		// msg와 msg5는 메모리에 생성된 위치(주소)가 다름
		// == 연산자로 비교해 보면 '불일치'로 출력
		if (msg == msg5) {
			System.out.println("일치함!");
		}
		else {
			System.out.println("일치 안함!");
		}
		
		if (msg.equals(msg5)) {
			System.out.println("일치!");
		}
		else {
			System.out.println("불일치!");
		}
		// 위에서 본 바와 같이 문자열 객체의 값을 비교할 때에는
		// == 연산자 대신에 equals method를 사용해야 함
		// equals ignore case를 사용하면 대/소문자 구분 없이 비교함
		if(msg.equalsIgnoreCase(msg5)) {
			System.out.println("일치~");
		}
		else {
			System.out.println("불일치~");
		}
		
		/*-------------------------------------------*/
		// 문자열 연결 시 + 연산자를 사용하면 필요 없는 객체 생성이 동반되어
		// 메모리 사용율과 CPU 자원 소모가 커짐
		// 따라서, StringBuilder 나 StringBuffer 를 사용할 것을 추천!
		String sql = " update BookDB " + " set title = ?, publicher = ?, author = ?, "
					  + " regdate = sysdate " + " where id = ? ";
		// 이런 경우 총 4개의 객체가 생성됨. 메모리 사용율의 증가... 필요 없는 작업의 발생
		StringBuilder sql2 = new StringBuilder();
		sql2.append( " update BookDB " )
		    .append( " set title = ?, publisher = ?, author = ?, " )
		    .append( " regdate = sysdate, " ).append( " where id = ? " );
		// 이렇게 하면 하나의 기억 장소에 추가 시키는 방법임
		// 사용 시에는 반드시 String 객체로 변화시켜 주어야 함
		System.out.println( sql2 );		// 자동 형변환
		String tmp = sql2.toString();	// 수동 형변환
		System.out.println( tmp );
		
	
		
	}
}









